package com.tiancheng.trade.authserver.vo;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.List;
import java.util.Objects;
import java.util.Set;

/**
 * 登录返回实体
 */
@Getter
@Setter
@Accessors(chain = true)
public class UserLogInResultVO implements Serializable {
    /**
     * 是否是游客账户
     */
    private Boolean isTourist;
    /**
     * 登陆类型
     */
    private String signInType;
    /**
     * 用户id
     */
    private Long id;
    /**
     * 用户open id
     */
    private String openId;
    /**
     * 用户unionId
     */
    private String unionId;
    /**
     * 用户名字
     */
    private String name;
    /**
     * 用户昵称
     */
    private String nick;
    /**
     * 用户头像
     */
    private String avatar;
    /**
     * 用户邮箱
     */
    private String email;
    /**
     * 用户电话
     */
    private String phone;
    /**
     * 性别 男/女
     */
    private String genderName;
    /**
     * 性别
     */
    private Integer gender;
    /**
     * 城市
     */
    private String city;
    /**
     * 用户角色
     */
    private Set<String> roles;
    /**
     * 用户权限
     */
    private Set<String> permissions;
    /**
     * 用户凭证
     */
    private String jwt;
    /**
     * 是否有密码
     */
    private Boolean hasPassword;
    /**
     * 绑定的三方平台
     */
    private Set<ThirdPlatformBind> thirdPlatformBinds;
    /**
     * cookie
     */
    private List<AppCookie> cookie;

    /**
     * 三方平台绑定信息
     */
    @Getter
    @Setter
    @Accessors(chain = true)
    public static class ThirdPlatformBind {
        /**
         * 三方平台
         */
        private String platform;
        /**
         * 三方平台client id
         */
        private String clientId;
        /**
         * 三方平台用户昵称
         */
        private String nick;
        /**
         * 三方平台用户头像
         */
        private String avatar;
        /**
         * openId
         */
        private String openId;
        /**
         * unionId
         */
        private String unionId;

        @Override
        public boolean equals(Object o) {
            if (this == o) {
                return true;
            }
            if (o == null || this.getClass() != o.getClass()) {
                return false;
            }
            ThirdPlatformBind that = (ThirdPlatformBind) o;
            return Objects.equals(this.platform, that.platform) &&
                    Objects.equals(this.clientId, that.clientId);
        }

        @Override
        public int hashCode() {
            return Objects.hash(this.platform, this.clientId);
        }
    }

    @Getter
    @Setter
    @Accessors(chain = true)
    @NoArgsConstructor
    @AllArgsConstructor
    public static class AppCookie {
        private String key;
        private String value;
        private Integer expiry;
        private String domain;
    }
}
